package org.jackysoft.util;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.jsp.PageContext;

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class TagTools {
	static final Log log = LogFactory.getLog(TagTools.class);

	/**
	 * @param String name 属性名称 例如user.address.city
	 * @param Object bean 对象bean
	 * @return Object 最后获取的属性值
	 * */
	public static Object parseFinalPropertyValue(final String name,final Object bean) {
		String[] itemNames = name.split("\\.");
		Object tobj = bean;	
		for (int i = 0; i < itemNames.length; i++) {
			Object tmp = null;
			try {
				if (tobj != null)
					tmp = PropertyUtils.getProperty(tobj, itemNames[i]);

			} catch (Exception e) {
				log.error(e);
				e.printStackTrace();
			}
			if (tmp == null) {
				// 这个是最终属性值，而非包含属性的bean元素了
				// 没有属性可取
				break;
			} else {
				// 还有层叠bean
				tobj = tmp;
				// log.info("tobj is "+ tobj);
				continue;
			}
		}
		return tobj;
	}

	/**
	 * @param String name 属性名称 例如user.address.city
	 * @param Object bean 对象bean
	 * @return Object 最后获取的属性值
	 * */
	public static Object parseNamedObject(String name, PageContext pageContext){
		String[] itemNames = name.split("\\.");
		// 目标对象在内存中的名字
		String firstObj = itemNames[0];
		// 目标对象
		Object tobj = null;
		tobj = pageContext.getAttribute(firstObj);
		if (tobj == null)
			tobj = pageContext.getRequest().getParameter(firstObj);
		if (tobj == null)
			tobj = pageContext.getRequest().getAttribute(firstObj);
		if (tobj == null)
			tobj = pageContext.getSession().getAttribute(firstObj);
		if (tobj == null)
			tobj = pageContext.getServletContext().getAttribute(firstObj);
		if (tobj == null)
			return null;
		for (int i = 1; i < itemNames.length; i++) {
			Object tmp = null;
			try {
				if (tobj != null)
					tmp = PropertyUtils.getProperty(tobj, itemNames[i]);

			} catch (Exception e) {
				log.error(e);
				e.printStackTrace();
			}
			if (tmp == null) {
				// 这个是最终属性值，而非包含属性的bean元素了
				// 没有属性可取
				break;
			} else {
				// 还有层叠bean
				tobj = tmp;
				// log.info("tobj is "+ tobj);
				continue;
			}
		}
		return tobj;
	}
	
	/**
	 * 分离属性对
	 * 
	 * @格式 {label|value,label|value,...}
	 */
	public static Map<String, String> getLabelValueMap(String lvstring) {

		lvstring = lvstring.substring(1, lvstring.length() - 1);

		Map<String, String> lvmap = new HashMap<String, String>();
		String[] sigs = lvstring.split("\\,");
		for (String os : sigs) {
			String[] lv = os.split("\\|");
			lvmap.put(lv[0], lv[1]);
		}
		return lvmap;
	}
}
